//package com.tjetc;
//
//import lombok.AllArgsConstructor;
//import lombok.Data;
//import lombok.EqualsAndHashCode;
//import lombok.NoArgsConstructor;
//
//import java.util.Objects;
//
//public class _22Object{
//    Object obj;
//    public static void main(String[] args){
//        /*
//            toString: 输出对象的地址
//                getClass().getName() + "@" + Integer.toHexString(hashCode());
//           地址对我们来说没有任何意义 所以我们需要重写toString方法来输出对象的信息
//           当我们输出对象时，不写toString方法 也是在隐式调用toString 方法
//
//         */
//        A a = new A(1, 1);
//        System.out.println(a.toString());
//        System.out.println(a.getClass().getName());
//
//    }
//
//    public static void main2(String[] args) {
//        /*
//            hashcode:
//            native:表示本地方法 在运行时调用了本地的c或c++来实现的
//                public native int hashCode();
//            1.两个引⽤，如果指向的是同⼀个对象，则哈希值肯定是⼀样的。
//            2.哈希值主要根据地址号来的， 不能完全将哈希值等价于地址。
//
//         */
//    }
//    public static void main1(String[] args) {
//       /*
//        equals 方法在非空对象引用上实现等价关系：
//        1. 自己和自己要相等
//        2. x == y  那么 y == x
//        3. x == y  y == z  那么 x == z
//        4. 在对象不变的情况下 x == y 多次调用也应该相等
//        5. 任何对象 和null比较 都应该返回false
//        */
//
//        A a = new A(1, 1);
//        A a1 = new A(1, 1);
//        System.out.println(a == a1); // 地址不同
//        // equals 默认就是比较两个对象的地址 所以如果我们想要比较两个对象的值 我们就需要重写equals方法
//        System.out.println(a.equals(a1));
//
//    }
//}
//
//// 使用注解 只能使用别人的逻辑
////@Data
////@EqualsAndHashCode
//class A{
//    int a;
//    int b;
//
//    public A(int a, int b) {
//        this.a = a;
//        this.b = b;
//    }
//
//    @Override
//    public boolean equals(Object o) {
//        // 自己和自己比
//        if (this == o) {
//            return true;
//        }
//        // o: 传进来的o
//        // getClass：获取当对象的类型
//        if (o == null || getClass() != o.getClass()) {
//            return false;
//        }
//        // 向下转型 转成可以比较的类型
//        A a1 = (A) o;
//        // 比较真正的值
//        return a == a1.a && b == a1.b;
//    }
//
//    // 目前先不管 重写equals方法必须要重写hashcode方法
//    @Override
//    public int hashCode() {
//        return Objects.hash(a, b);
//    }
//
//    @Override
//    public String toString() {
//        return "A{" +
//                "a=" + a +
//                ", b=" + b +
//                '}';
//    }
//
//}
